package br.com.sistemavendas.servlets;

import br.com.sistemavendas.dao.ClienteDAO;
import br.com.sistemavendas.dao.FornecedorDAO;
import br.com.sistemavendas.dao.FuncionarioDAO;
import br.com.sistemavendas.dao.ProdutoDAO;
import br.com.sistemavendas.entidades.Cliente;
import br.com.sistemavendas.entidades.Fornecedor;
import br.com.sistemavendas.entidades.Funcionario;
import br.com.sistemavendas.entidades.Produto;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Elias
 */
@WebServlet(name = "ServletLogin", urlPatterns = {"/controller"})
public class ServletLogin extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        FornecedorDAO fornecedorDAO = new FornecedorDAO();
        ProdutoDAO produtoDAO = new ProdutoDAO();
        ClienteDAO clienteDAO = new ClienteDAO();
        PrintWriter escritor = response.getWriter();

        // VARIAVEIS UTILIZADAS PARA FILTRAR TIPO DE METODO UTILIZADO
        String acao = request.getParameter("acao");

        if (acao != null) {
            if (acao.equals("logout")) {
                HttpSession session = request.getSession();
                session.invalidate();
                response.sendRedirect("login.jsp");
            }


            /* ACAO = EDITAR */
            if (acao.equals("editfornecedor")) {
                Long idFornecedor = Long.parseLong(request.getParameter("id"));
                Fornecedor fornecedor = fornecedorDAO.getById(Fornecedor.class, idFornecedor);
                request.setAttribute("fornecedor", fornecedor);
                request.getRequestDispatcher("restrito/cadastrofornecedores.jsp").forward(request, response);

            }
            /* FIM METODO EDITAR */

            /* ACAO = EXCLUIR FORNECEDOR */
            if (acao.equals("excfornecedor")) {
                Long id = Long.parseLong(request.getParameter("id"));
                Fornecedor excluir = fornecedorDAO.getById(Fornecedor.class, id);
                boolean flag = fornecedorDAO.delete(excluir);
                if (flag) {
                    escritor.print("<script type='text/javascript'>");
                    escritor.println("document.write('<h3> " + excluir.getNome() + " excluido com sucesso!</h3>')");
                    escritor.println("document.write('<h4>você será redirecionado... aguarde!</h4>')");
                    escritor.println("setTimeout(function(){window.location = 'listafornecedores.jsp'}, '3000')");
                    escritor.print("</script>");
                    escritor.print("<title></title>");
                    escritor.print("</head>");
                    escritor.print("<body><h1></h1></body></html>");
                }
            }
            /* FIM METODO EXCLUIR FORNECEDOR */

            /* ACAO  = EXCLUIR PRODUTOS*/
            if (acao.equals("excproduto")) {
                Long idProduto = Long.parseLong(request.getParameter("id"));
                Produto excluir = produtoDAO.getById(Produto.class, idProduto);
                boolean flag = produtoDAO.delete(excluir);
                if (flag) {
                    escritor.print("<script type='text/javascript'>");
                    escritor.println("document.write('<h3> " + excluir.getNome() + " excluido com sucesso!</h3>')");
                    escritor.println("document.write('<h4>você será redirecionado... aguarde!</h4>')");
                    escritor.println("setTimeout(function(){window.location = 'listafornecedores.jsp'}, '3000')");
                    escritor.print("</script>");
                    escritor.print("<title></title>");
                    escritor.print("</head>");
                    escritor.print("<body><h1></h1></body></html>");
                }
            }
            /* FIM METODO EXCLUIR PRODUTO */

            /* ACAO = EDITAR PRODUTO */
            if (acao.equals("editproduto")) {

                Long idProduto = Long.parseLong(request.getParameter("id"));
                Produto editProduto = produtoDAO.getById(Produto.class, idProduto);
                request.setAttribute("produto", editProduto);
                request.getRequestDispatcher("restrito/cadastroprodutos.jsp").forward(request, response);

            }
            /* FIM DO METODO EDITAR PRODUTO */

            if (acao.equals("exccliente")) {
                Long idCliente = Long.parseLong(request.getParameter("id"));
                Cliente excluir = clienteDAO.getById(Cliente.class, idCliente);
                boolean flag = clienteDAO.delete(excluir);

                if (flag) {

                    escritor.print("<script type='text/javascript'>");
                    escritor.println("document.write('<h3> " + excluir.getNome() + " excluido com sucesso!</h3>')");
                    escritor.println("document.write('<h4>você será redirecionado... aguarde!</h4>')");
                    escritor.println("setTimeout(function(){window.location = 'listafornecedores.jsp'}, '3000')");
                    escritor.print("</script>");
                    escritor.print("<title></title>");
                    escritor.print("</head>");
                    escritor.print("<body><h1></h1></body></html>");

                }
            }

            /* ACAO = EDITAR CLIENTE */
            if (acao.equals("editcliente")) {

                Long idCliente = Long.parseLong(request.getParameter("id"));
                Cliente editCliente = clienteDAO.getById(Cliente.class, idCliente);
                request.setAttribute("cliente", editCliente);
                request.getRequestDispatcher("restrito/cadastroclientes.jsp").forward(request, response);
            }
        }
        /* FIM DO METODO EDITAR PRODUTO */

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        //DAOS E OBJETOS UTILIZADOS POR TODOS METODOS
        FornecedorDAO fornecedorDAO = new FornecedorDAO();
        ProdutoDAO produtoDAO = new ProdutoDAO();
        ClienteDAO clienteDAO = new ClienteDAO();
        FuncionarioDAO dao = new FuncionarioDAO();
        PrintWriter escritor = response.getWriter();

        // VARIAVEL UTILIZADA PARA FILTRAR AÇÕES DOS FORMULARIOS
        String acao = request.getParameter("acao");

        /* ACAO = CADASTRO CADASTROPRODUTOS */
        if (acao != null) {
            if (acao.equals("cadProdutos")) {

                // instanciando objetos globais e capturando dados
                String nome = request.getParameter("nome");
                String valor = request.getParameter("valor");
                String quantidade = request.getParameter("quantidade");

                String idForn = request.getParameter("fornecedor");

                try {
                    // conversão de tipos e instanciando objetos
                    Long idFornLong = Long.parseLong(idForn);

                    Fornecedor fornecedorSelecionado = fornecedorDAO.getById(Fornecedor.class, idFornLong);

                    Produto produto = new Produto();
                    Produto saved = null;

                    //setando os dados
                    produto.setNome(nome);
                    produto.setQuantidade(Integer.parseInt(quantidade));
                    produto.setValor(Double.parseDouble(valor));

                    saved = produtoDAO.save(produto);

                    if (saved != null) {
                        if (fornecedorSelecionado != null) {
                            fornecedorSelecionado.getProdutos().add(saved);
                            fornecedorDAO.save(fornecedorSelecionado);
                        }
                        // saida para o cliente avisando se o objeto foi salvo.
                        escritor.print("<script type='text/javascript'>");
                        escritor.println("document.write('<h3>" + produto.getNome() + " cadastrado com sucesso!</h3>')");
                        escritor.println("document.write('<h4>você será redirecionado... aguarde!</h4>')");
                        escritor.println("setTimeout(function(){window.location = 'restrito/cadastroprodutos.jsp'}, '3000')");
                        escritor.print("</script>");
                        escritor.print("<title></title>");
                        escritor.print("</head>");
                        escritor.print("<body><h1></h1></body></html>");
                    }

                } catch (NumberFormatException a) {
                    escritor.print("<html><head>");
                    escritor.print("<script>");
                    escritor.println("document.write('<h3>Erro ao cadastrar produto!\nContate o admnistrador do sistema.\n" + a + "</h3>')");
                    escritor.println("document.write('<h4>você será redirecionado... aguarde!</h4>')");
                    escritor.println("setTimeout(function(){window.location = 'restrito/cadastroprodutos.jsp'}, '3000')");
                    escritor.print("</script>");
                    escritor.print("<title></title>");
                    escritor.print("</head>");
                }
            }
            /* FIM METODO CADASTROPRODUTOS */

            /* ACAO = CADASTROFORNECEDORES */
            if (acao.equals("logar")) {
                String login = request.getParameter("nome");
                String senha = request.getParameter("senha");
                int flag = 0;

                List<Funcionario> funcionarios = dao.findAll(Funcionario.class);

                for (Funcionario f : funcionarios) {
                    if (f.getNome().equals(login) && f.getSenha().equals(senha)) {
                        flag = 1;
                        HttpSession sessao = request.getSession();
                        sessao.setAttribute("sessao", f);
                        response.sendRedirect("restrito/index.jsp");
                        break;
                    }
                }

                if (flag == 0) {
                    request.setAttribute("flag", flag);
                    request.getRequestDispatcher("login.jsp").forward(request, response);
                }
            }
            /* FIM METODO CADASTROFORNECEDORES */

            /* ACAO = CADASTROFORNECEDORES */
            if (acao.equals("cadFornecedores")) {

                String nome = request.getParameter("nome");
                String cidade = request.getParameter("cidade");
                String estado = request.getParameter("estado");

                try {
                    Long id = Long.parseLong(request.getParameter("id"));
                    Fornecedor fornecedor;

                    if (id > 0) {
                        fornecedor = fornecedorDAO.getById(Fornecedor.class, id);
                    } else {
                        fornecedor = new Fornecedor();
                    }

                    fornecedor.setNome(nome);
                    fornecedor.setCidade(cidade);
                    fornecedor.setEstado(estado);

                    Fornecedor saved = fornecedorDAO.save(fornecedor);

                    if (saved != null) {
                        // SAIDA AVISANDO SE O OBJETO FOI SALVO COM SUCESSO
                        escritor.print("<html><head>");
                        escritor.print("<script type='text/javascript'>");
                        escritor.println("document.write('<h3>" + fornecedor.getNome() + " cadastrado com sucesso!</h3>')");
                        escritor.println("document.write('<h4>você será redirecionado... aguarde!</h4>')");
                        escritor.println("setTimeout(function(){window.location = 'restrito/cadastrofornecedores.jsp'}, '3000')");
                        escritor.print("</script>");
                        escritor.print("<title></title>");
                        escritor.print("</head>");
                        escritor.print("<body><h1></h1></body></html>");
                    }
                } catch (NumberFormatException e) {
                    escritor.print("<html><head>");
                    escritor.print("<script>");
                    escritor.println("document.write('<h3>Erro ao cadastrar usuário!\nContate o admnistrador do sistema.\n" + e + "</h3>')");
                    escritor.println("document.write('<h4>você será redirecionado... aguarde!</h4>')");
                    escritor.println("setTimeout(function(){window.location = 'restrito/cadastrofornecedores.jsp'}, '3000')");
                    escritor.print("</script>");
                    escritor.print("<title></title>");
                    escritor.print("</head>");
                }
            }
            /* FIM METODO CADASTROFORNECEDORES   */

            /* ACAO = CADASTRO CLIENTES */
            if (acao.equals("cadClientes")) {
                try {
                    Cliente saved;
                    Cliente cliente = new Cliente();

                    // RECUPERANDO PARAMETROS DA REQUISICAO
                    String nome = request.getParameter("nome");
                    String sexo = request.getParameter("sexo");
                    String cidade = request.getParameter("cidade");
                    String estado = request.getParameter("estado");
                    String cpf = request.getParameter("cpf");

                    // SETADO DADOS PARA OBJETO
                    cliente.setCidade(cidade);
                    cliente.setCpf(cpf);
                    cliente.setEstado(estado);
                    cliente.setSexo(sexo);
                    cliente.setNome(nome);

                    saved = clienteDAO.save(cliente);
                  
                    if (saved != null) {
                        // SAIDA PARA O CLIENTE AVISANDO SE O CLIENTE FOI SALVO.
                        escritor.print("<html><head>");
                        escritor.print("<script type='text/javascript'>");
                        escritor.println("document.write('<h3>" + cliente.getNome() + " cadastrado com sucesso!</h3>')");
                        escritor.println("document.write('<h4>você será redirecionado... aguarde!</h4>')");
                        escritor.println("setTimeout(function(){window.location = 'restrito/cadastroprodutos.jsp'}, '3000')");
                        escritor.print("</script>");
                        escritor.print("<title></title>");
                        escritor.print("</head>");
                        escritor.print("<body><h1></h1></body></html>");
                    }
                } catch (Exception e) {
                    escritor.print("<html><head>");
                    escritor.print("<script>");
                    escritor.println("document.write('<h3>Erro ao cadastrar Cliente!\nContate o admnistrador do sistema.\n" + e + "</h3>')");
                    escritor.println("document.write('<h4>você será redirecionado... aguarde!</h4>')");
                    escritor.println("setTimeout(function(){window.location = 'restrito/cadastroprodutos.jsp'}, '3000')");
                    escritor.print("</script>");
                    escritor.print("<title></title>");
                    escritor.print("</head>");
                }

            }
            /* FIM METODO CADASTROCLIENTES */
        }
    }
}
